package com.rgc.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;






import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.support.JdbcDaoSupport;






import com.rgc.domain.Agrupacion;
import com.rgc.domain.Usuario;


public class GrupoDaoImpl extends JdbcDaoSupport implements GrupoDao {

	public boolean addGrupo(final Agrupacion grupo) {
			try {
				
				final String sql = "INSERT INTO grupo(nombre,mail) values(?,?)";
				getJdbcTemplate().update(
						new PreparedStatementCreator()
				        {
				            public PreparedStatement createPreparedStatement(Connection conn) throws SQLException
				            {
				                PreparedStatement preparedStatement = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
				                preparedStatement.setString(1, grupo.getNombre());
				                preparedStatement.setString(2, grupo.getMail());   
				                return preparedStatement;
				            }
				        }	
						);			
				System.out.println(sql);
	            return true;
	                
	        } catch (Exception e) {
	                System.out.println(e.getMessage());
	                e.printStackTrace();
	        }
			return false;
	}

	public List<Agrupacion> listGrupo(String[] parametro,String[] Valor) {
		
		try {
			String sql = " SELECT * FROM grupo ";
			String conector=" where ";
			for (int i=0;i<parametro.length;i++)  {
				 sql+=conector+""+parametro[i]+"='"+Valor[i]+"'";
				 conector=" and ";			 
		    }
			sql+=conector+"  estado=1 "+" order by idgrupo ";
			System.out.println(sql);
			List<Agrupacion> grupoFound =  getJdbcTemplate().query(
        			sql, new BeanPropertyRowMapper<Agrupacion>(Agrupacion.class));
         
			
        	return grupoFound;
        	
    } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
    }
	return new ArrayList<Agrupacion>();	
	}

	public Agrupacion getGrupo(int idgrupo) {
		List<Agrupacion> lista=listGrupo(new String[]{"idgrupo"},new String[]{""+idgrupo});
		if(lista.size()>0)
			return lista.get(0);
		return null;
	}


	

	public boolean checkMail(Agrupacion grupo) {
		
		List<Agrupacion> listaMail=listGrupo(new String[]{"mail"}, new String[]{grupo.getMail()});
		
		if(listaMail.size()==0 )
			return false;
		return true;
	}

	public boolean checkNombre(Agrupacion grupo) {
		List<Agrupacion> listaMail=listGrupo(new String[]{"nombre"}, new String[]{grupo.getNombre()});
		
		if(listaMail.size()==0 )
			return false;
		return true;
	}

	public List<Agrupacion> listGrupo() {
		List<Agrupacion> grupo=listGrupo(new String[]{},new String[]{});
		return grupo;
	}

	public boolean delGrupo(String idgrupo) {
		try {
			String sql = "UPDATE grupo set estado=0 where idgrupo='"+idgrupo+"' ";
	         getJdbcTemplate().update(sql);
	         
	         sql="DELETE FROM permiso where idagrupacion='"+idgrupo+"' ";
	         getJdbcTemplate().update(sql);
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
		return true;
	}

	public Agrupacion getGrupo(String idgrupo) {
		try{
			
			return getGrupo(Integer.parseInt(idgrupo));
			
			
		}catch(Exception e){}
		
		return null;
	}
	
	public boolean modGrupo(Agrupacion grupo){
		try{
		String sql = "UPDATE grupo set nombre='"+grupo.getNombre()+"', mail='"+grupo.getMail()+"', direccion='"+grupo.getDireccion()+"', telefono='"+grupo.getTelefono()+"', contacto='"+grupo.getContacto()+"', urlimagen='"+grupo.getUrlimagen()+"' where idgrupo='"+grupo.getIdgrupo()+"' ";
        getJdbcTemplate().update(sql);
        return true;
		}catch(Exception e){
			e.printStackTrace();
			
		}
		return false;
	}

}
